﻿using System;
using System.Text;
using System.Text.RegularExpressions;
using System.Web;
using System.Xml;
using System.IO;

namespace YuuzleComic.Common
{
	/// <summary>
	/// WEB信息
	/// </summary>
	public class ServerInfo
	{
		/// <summary>
		/// 取得网站的根目录的URL
		/// </summary>
		/// <returns></returns>
		public static string GetRootURI()
		{
			string AppPath = "";
			HttpContext HttpCurrent = HttpContext.Current;
			HttpRequest Req;
			if (HttpCurrent != null)
			{
				try
				{
					Req = HttpCurrent.Request;

					string UrlAuthority = Req.Url.GetLeftPart(UriPartial.Authority);
					if (Req.ApplicationPath == null || Req.ApplicationPath == "/")
						//直接安装在   Web   站点   
						AppPath = UrlAuthority;
					else
						//安装在虚拟子目录下   
						AppPath = UrlAuthority + Req.ApplicationPath;
				}
				catch { }
			}
			return AppPath;
		}
		/// <summary>
		/// 取得网站的根目录的URL
		/// </summary>
		/// <param name="Req"></param>
		/// <returns></returns>
		public static string GetRootURI(HttpRequest Req)
		{
			string AppPath = "";
			if (Req != null)
			{
				string UrlAuthority = Req.Url.GetLeftPart(UriPartial.Authority);
				if (Req.ApplicationPath == null || Req.ApplicationPath == "/")
					//直接安装在   Web   站点   
					AppPath = UrlAuthority;
				else
					//安装在虚拟子目录下   
					AppPath = UrlAuthority + Req.ApplicationPath;
			}
			return AppPath;
		}
		/// <summary>
		/// 取得网站根目录的物理路径
		/// </summary>
		/// <returns></returns>
		public static string GetRootPath()
		{
			string AppPath = "";
			HttpContext HttpCurrent = HttpContext.Current;
			if (HttpCurrent != null)
			{
				AppPath = HttpCurrent.Server.MapPath("~");
			}
			else
			{
				AppPath = AppDomain.CurrentDomain.BaseDirectory;
				AppPath = AppPath.TrimEnd('\\');
			}
			return AppPath;
		}
		/// <summary>
		/// 端口
		/// </summary>
		public static string ServerPort
		{
			get
			{
				string paths = null;
				if (HttpContext.Current == null)
				{
					paths = System.Threading.Thread.CurrentThread.Name;
				}
				else
				{
					paths = HttpContext.Current.Request.ServerVariables["Server_Port"].ToString();
				}
				return paths;
			}
		}

        /// <summary>
        /// 生成google网站地图
        /// </summary>
        /// <returns></returns>
        public static bool BuildGoogleSitemap()
        {
            try
            {
                string RootDirectory = AppDomain.CurrentDomain.BaseDirectory;
                XmlTextWriter Writer = new XmlTextWriter(HttpContext.Current.Server.MapPath("~/sitemap.xml"), Encoding.GetEncoding("utf-8"));
                Writer.Formatting = Formatting.Indented;
                Writer.WriteStartDocument();
                Writer.WriteStartElement("urlset", "http://www.google.com/schemas/sitemap/0.84");
                //遍历扫描网站所有文件
                showfiles(RootDirectory, Writer);

                Writer.WriteEndElement();
                Writer.WriteEndDocument();
                Writer.Close();
                return true;

            }
            catch (Exception err)
            {
                return false;
            }
        }


        //遍历扫描网站所有文件
        static void showfiles(string dirpath, XmlTextWriter Writer)
        {
            bool IsRead = true;
            string[] NotRead = { "App_Data", "Bin", "editor", "Scripts", "controls", "cpic", "cpic2", "admin", "css","data","images","inc","sql_bak","upload" };//排除这些文件夹
            foreach (string s in NotRead)
            {
                string dirname = dirpath.Substring(dirpath.LastIndexOf(@"\") + 1);
                if (dirname == s)
                {
                    IsRead = false;
                    break;
                }
            }
            if (!IsRead)
                return;

            try
            {
                DirectoryInfo dir = new DirectoryInfo(dirpath);
                foreach (FileInfo f in dir.GetFiles())
                {
                    string path = dir.FullName.Replace(AppDomain.CurrentDomain.BaseDirectory, "");//文件相对目录
                    //HttpContext.Current.Response.Write(AppDomain.CurrentDomain.BaseDirectory + "**********" + dir.FullName + "<br>");
                    Writer.WriteStartElement("url");

                    Writer.WriteStartElement("loc");
                    StringBuilder sb = new StringBuilder("/" + path + "/" + f.Name);
                    sb.Replace("//", "/").Replace(@"\", "/");
                    Writer.WriteString("http://www.yzmanga.com" + sb.ToString());
                    Writer.WriteEndElement();

                    Writer.WriteStartElement("lastmod");
                    Writer.WriteString(string.Format("{0:yyyy-MM-dd}", f.LastWriteTime));
                    Writer.WriteEndElement();

                    Writer.WriteStartElement("changefreq");
                    Writer.WriteString("always");//更新频率：always：经常，hourly：小时，daily：天，weekly：周，monthly：月，yearly：年 
                    Writer.WriteEndElement();

                    Writer.WriteStartElement("priority");
                    Writer.WriteString("0.8");//相对于其他页面的优先权，此值定于0.0 - 1.0之间 
                    Writer.WriteEndElement();

                    Writer.WriteEndElement();
                }
                foreach (DirectoryInfo d in dir.GetDirectories())
                {
                    showfiles(d.FullName, Writer);
                }
            }
            catch (Exception) { }
        }
	}
}
